<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

/**
* Controller para efetuar o login e logout do sistema administrativo.
*
* @property \Doctrine\ORM\EntityManager $em Gerenciador de Entidade
*/
class Login extends AdminController {
    
    function __construct()
    {
        parent::__construct();
        $this->layoutFile = "admin/template_login.php";
    }
    
    
    /**
     * Carrega a visualização de login
     *
     */
    public function index(){
        $this->display( 'login/index' );
    }

    /**
     * Efetua a validação do usuário no sistema e efetua o login do mesmo.
     *
     * Caso as credenciais estejam corretas, gravamos as informações de login
     * na sessão.
     *
     */
    public function do_login() {
        // se uma informação ficou em branco,
        // redirecionamos para a tela de login
        if( $this->input->post('login') == '' || $this->input->post('senha') == '' ){
            redirect('admin/login/index/informe_seus_dados');
        }
        
        // nova instancia de usuario
        $user = new Usuarios();

        // pegamos as informações do formulario.
        $user->set_login( $this->input->post( 'login' ) );

        // colocamos a senha em md5
        $user->set_senha( md5( $this->input->post( 'senha' ) ) );

        // faz a consulta obtendo o numero de resultados
        
        $userDao = $this->doctrine->em->getRepository( 'Usuarios' )->findOneBy( array( 'login' => $user->get_login(), 'senha' => $user->get_senha() ) );

        // se não encontrou nada
        if( count( $userDao ) == 0 ) {
            redirect( 'admin/login/index/usuario_nao_encontrado' );
        }
        // se encontrou, colocamos os dados do usuario na sessão
        $_SESSION['usuario'] = $userDao;
        $perfis =  $this->getPerfisUsuarios($userDao->get_id_usuario());
        $_SESSION['perfis'] = $perfis;
        $this->setPermissoesByPerfisInSession($perfis);
        // redirecionamos o usuario para a tela de produtos.
        redirect( 'admin/home/index' );
    }
    
    private function setPermissoesByPerfisInSession($perfis){
        $permissoes = array('^admin/home/.*?', '^admin/login/.*?', '^admin/relatorio/.*?');
        $menusPermissao = array('inicio', 'sair');
        foreach($perfis as $perfil){
            switch($perfil){
                case "Administrador":
                    $_SESSION['permissoes'] = array('^admin/.*?');
                    $_SESSION['menus'] = array('projeto', 'suiteteste', 'casoteste', 'logteste', 'scriptteste', 'usuario');
                    return;
                case "Analista":
                    array_push($permissoes, '^admin/scriptteste/.*?', '^admin/suiteteste/.*?', '^admin/casoteste/.*?', '^admin/usuario/.*?', '^admin/projeto/.*?'); 
                    array_push($menusPermissao, 'usuario', 'projeto', 'scriptteste', 'casoteste', 'suiteteste');
                    break;
                case "Arquiteto":
                    break;
                case "Desenvolvedor":
                    array_push($permissoes, '^admin/scriptteste/.*?', '^admin/suiteteste/.*?', '^admin/casoteste/.*?');
                    array_push($menusPermissao, 'scriptteste', 'casoteste', 'suiteteste');
                    break;
                case "Gerente de Projetos":
                    array_push($permissoes, '^admin/projeto/.*?');
                    array_push($menusPermissao, 'projeto');
                    break;
                case "Stakeholders":
                    array_push($permissoes, '^admin/projeto/index.*?', '^admin/projeto/editar.*?', '^admin/projeto/vincularUsuarios.*?' );
                    array_push($menusPermissao, 'projeto');
                    break;
                case "Testador":
                    array_push($permissoes, '^admin/logteste/.*?', '^admin/scriptteste/.*?', '^admin/suiteteste/.*?', '^admin/casoteste/.*?', '^admin/perfil/.*?');
                    array_push($menusPermissao, 'logteste', 'scriptteste', 'casoteste', 'suiteteste');
                    break;
            }
        }
        $_SESSION['permissoes'] = array_unique($permissoes);
        $_SESSION['menus'] = array_unique($menusPermissao);
    }

    /**
     * Efetua o logout do usuario
     *
     * Limpa os dados da seção e envia o usuário para a tela de login
     *
     */
    public function do_logout(){
        $_SESSION = array();
        redirect( 'admin/login/index' );
    }
    
    private function getPerfisUsuarios($idUsuario){
        $sql = "select "
                ."up.desc_perfil "
                ."from "
                ."usuarios u "
                ."inner join usuarios_perfis up "
                ."on u.id_usuario_perfil = up.id_usuario_perfil "
                ."where "
                ."u.id_usuario = $idUsuario";
        $stmt = $this->doctrine->em->getConnection()->prepare($sql);
        $stmt->execute();
        $perfis = $stmt->fetchAll();
        return $perfis[0];
    }
    
}
/* End of file login.php */
/* Location: ./application/controllers/admin/login.php */